/*
esp8266
NodeMCU 开发板上Flash按钮引脚对应为D3，读取该引脚，表示flash按钮是否按下（需要手动刷新页面，才会刷新状态）
2021-09-12
*/

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266WebServer.h>

#define buttonFlash D3 // 按钮引脚D3

ESP8266WiFiMulti wifiMulti;

ESP8266WebServer esp8266_server(80); // 网络服务器http服务器对象，端口80

void setup()
{
  Serial.begin(9600);       // 启动中口
  pinMode(buttonFlash, INPUT_PULLUP); // 设置按键引脚为上拉输入模式
  
  wifiMulti.addAP("TPLeeSZ","2021#@Lee.com"); // 通过addAP添加wifi密码记录
  wifiMulti.addAP("TPLee","Lee@811212");
  wifiMulti.addAP("TPLee2","Lee@811212");
  
  Serial.print("Connecting ... ");
  int i = 0;
  while(wifiMulti.run() != WL_CONNECTED) // wifiMulti.run()是重点，通过wifi环境中搜索addAP函数所存储的WiFi，成功为WL_CONNECTED
  {
    delay(1000);    // 1秒重试1次
    Serial.print(".");  
  }

  Serial.println("\n");
  Serial.print("Connected to "); // 连接成功
  Serial.println(WiFi.SSID());    // 连接的wifi名称
  Serial.print("IP address:\t");
  Serial.println(WiFi.localIP()); // 返回NodeMCU的IP地址

  // 启动网络服务功能
  esp8266_server.begin();
  esp8266_server.on("/", handleRoot);       // 根路径响应
  esp8266_server.onNotFound(handleNoFound); // 404响应
  Serial.println("HTTP esp8266_server started");
}

void handleRoot() // 处理网站根目录访问
{
  bool isOn = !digitalRead(buttonFlash); // 按下低电平
  String stat = isOn ? "LOW(Button Down)" : "HIGH(Button Up)";
  String content = "<div style=\"color:#ffffff;background-color:#49999d;\">"+stat+"</div>";
  esp8266_server.send(200, "text/html;charset=UTF-8", content);
}

void handleNoFound() // 处理 404访问
{
  esp8266_server.send(404, "text/plain", "The page not found!(from ESP8266)");
}

void loop()
{
  esp8266_server.handleClient(); // 处理http服务访问
}
